iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Python

進擊的Python系列 第 25

Day22-陣列排序

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20240824/2016325710ODkym3p3.jpg
https://ithelp.ithome.com.tw/upload/images/20240824/201632578jFvTZjvbz.jpg
圖片來源:(https://forum.gamer.com.tw/Co.php?bsn=43473&sn=45361)

NumPy陣列排序(深入淺出)

numpy.sort()

返回一個已排序的陣列副本,不修改原始陣列

import numpy as np

arr = np.array([3, 1, 2, 5, 4])
sorted_arr = np.sort(arr)
print(sorted_arr)  # 輸出: [1 2 3 4 5]
  • axis:指定排序的軸,預設為-1(最後一軸)
  • kind:指定排序算法,常見的有 quicksort(快速排序)mergesort(合併排序)heapsort(堆排序)

ndarray.sort()

直接對陣列進行排序,修改原陣列

arr.sort()
print(arr)  # 輸出: [1 2 3 4 5]

參數:與 numpy.sort() 相同

numpy.argsort()

返回排序後的索引值

index = np.argsort(arr)
print(index)  # 輸出: [1 2 0 4 3]  # 表示原始陣列中元素的排序索引

多維陣列排序

arr = np.array([[3, 1], [2, 5]])
sorted_arr = np.sort(arr, axis=1)  # 按行排序
print(sorted_arr)
sorted_arr = np.sort(arr, axis=0)  # 按列排序
print(sorted_arr)

複數排序

numpy.sort_complex():特別用於複數陣列的排序,根據複數的模長進行排序

部分排序

numpy.partition():將陣列分為兩部分,一部分小於指定的值,另一部分大於等於指定的值

# 隨機生成一個陣列
arr = np.random.randn(5)

# 排序
sorted_arr = np.sort(arr)

# 根據索引值對另一個陣列排序
values = np.array([10, 20, 30, 40, 50])
sorted_values = values[np.argsort(arr)]

# 按列排序一個二維陣列
arr2d = np.random.randn(3, 4)
sorted_arr2d = np.sort(arr2d, axis=0)

結論

選擇排序方法:根據是否需要修改原陣列、排序維度、資料型態等因素選擇合適的函數
排序算法:NumPy提供多種排序算法,可根據資料量和排序穩定性等因素選擇
索引排序:numpy.argsort()對於需要保留原始資料索引的情況非常有用

https://ithelp.ithome.com.tw/upload/images/20240824/201632571JFvwVXCn8.jpg
圖片來源:(https://forum.gamer.com.tw/Co.php?bsn=43473&sn=45361)


上一篇
Day21-分割與合併陣列
下一篇
Day23-Flask與Django(艾魯多)
系列文
進擊的Python36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言